//这节内容是新增加的map和set数据结构和原来的Array和Object数据结构进行对比

{
    //Map与Array的对比
    // let map=new Map();
    // let array=[];

    // //增
    // map.set('t',1);
    // //其实我感觉,也可以使用array[0]={t:1} 这样来增加元素(我感觉这个本质应该是访问并赋值)
    // array.push({t:1});

  

    //查找元素
    // console.log("map当中有没有t(键)这个元素",map.has('t'));
    // //这里注意这个find的使用方法,每个元素都会传入这个cb函数,直到这个cb函数返回true,然后才会返回这个元素
    // console.log("array当中有没有t(键)这个元素",array.find(i=>i.t));

    //更改元素
    // map.set('t',2);

    // //更改数组元素为什么不使用索引呢?
    // //在这里,老师使用了forEach()方法
    // array.forEach(i=>i.t?i.t=2:false);

    // console.log('更改过后的map数据类型',map);
    // console.log('更改过后的array数据类型',array);


    //删除元素
    // map.delete('t');
    // //数组当中的删除比较麻烦,为什么呢
    // //数组当中通过splice()方法来进行删除(注意!!!这个应该和slice()方法区分来,这两个是完全不同的)
    // //slice()方法是分割数组(返回值就是你分割的那一部分,不会影响原数组)
    // //splice()方法是删除数组当中指定的元素(返回值是删除的那一部分),会对原来的数组做影响

    // //splice()方法首先应该获取数组的索引
    // //这里,我们使用findIndex()来找到相对应的索引,使用方法和find相同,只不过返回的是索引
    // let index=array.findIndex(i=>i.t);
    // array.splice(index,1);

    // console.log("map删除过以后",map);
    // console.log("array删除过以后",array);

}

{
    //Set与array的对比
    let set=new Set();
    let array=[];

    //增加元素

    //这里需要注意了,set是没有键的,这个你是知道的.
    //所以说这里只能去添加一个对象,里面是你想要的键值对
    //并不能像map那样添加键值对
    set.add({t:1});

    array.push({t:1});
    // console.log("set的值为",set);
    // console.log("array的值为",array);

    //查找元素

    //注意,这种查找是肯定是返回false的,为什么,因为对象都是引用类型的,虽然
    //对象的值都是一样的,但是其引用的地址都是不一样的.所以才会返回false.
    // let set_exist=set.has({t:1});//一般来讲应该把添加的对象的引用保存起来,这样才能够查找值
    // //array还是正常的返回
    // let array_exist=array.find(i=>i.t);
    // console.log("set的返回值为",set_exist);
    // console.log("array的返回值为",array_exist);

    //更改元素
    //这里为什么不能使用add来覆盖呢
    //还是那句话,你add添加的是引用类型,存储的都是以引用地址
    //虽然值都是一样的,但是引用的地址却不同,所以说才并不是一样的值
    // set.forEach(i=>i.t?i.t=2:false);

    // array.forEach(i=>i.t?i.t=2:false);
    // console.log("更改过后的set",set);
    // console.log('更改过后的array',array);


    //删除元素

    //这里的删除,还是要先forEach(),因为这个还是引用类型的问题
    //这里的i就是相当于获取了这里的引用地址
    // set.forEach(i=>i.t?set.delete(i):false);

    // //数组的删除和上面的一样.
    // let index=array.findIndex(i=>i.t);
    // array.splice(index,1);//参数1就是删除一个元素
    // console.log('删除过后的set',set);
    // console.log('删除过后的array',array);

}


{

    let item={t:1};

    let map=new Map();
    let set=new Set();
    let obj={};

    //增
    map.set("t",1);
    set.add(item);
    obj["t"]=1;

    //查
    //这里的obj要使用in来查询(这个是操作符)
    // console.log("map的查",map.has("t"));
    // console.log("set的查",set.has(item));
    // console.log("obj的查","t" in obj );

    //改
    map.set("t",2);
    //这里注意了因为set存储的是引用地址,所以可以直接修改item的值,从而修改set当中存储的对象
    item.t=2;
    obj["t"]=2;
    

}
